00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef DECAMERA_HPP
00029 #define DECAMERA_HPP
00030
00031 #include "deGlobalTypes.hpp"
00032 #include "deMath.hpp"
00033 #include "deScene.hpp"
00034
00035 #define DECAMERA_API DESCENE_API
00036
00037 class IdeCamera;
00038 class IdePlaneFrustum;
00039
00040
00041
00042 DECAMERA_API IdeCamera * IdeCamera_CreateCamera();
00043 DECAMERA_API IdeCamera * IdeCamera_CreateCameraFromRef(IdeCamera* ref);
00044
00045 DECAMERA_API IdePlaneFrustum * IdeFrustum_CreatePlaneFrustum();
00046
00047 typedef IdeCamera * (*fIdeCamera_CreateCamera)();
00048 typedef IdeCamera * (*fIdeCamera_CreateCameraFromRef)(IdeCamera* ref);
00049
00050
00051
00052
00053 DE3D_INTERFACE_(IdeCamera)
00054 {
00055 protected:
00056 virtual ~IdeCamera(void) {}
00057 public:
00058
00059 virtual long Release() = 0;
00060
00061
00062 virtual void SetWindow(HWND window) = 0;
00063
00064 virtual void SetRect(deRect rect) = 0;
00065
00066 virtual void SetFOV(deDouble Degrees) = 0;
00067
00068 virtual void SetScreenAspect(long PixelWidth, long PixelHeight, deDouble AspectRatio) = 0;
00069
00070 virtual void SetClip(deDouble Near, deDouble Far) = 0;
00071 virtual void FogEnable(deBoolean Enable) = 0;
00072 virtual void SetFog(deFloat Near, deFloat Far, deARGB Color, deBoolean RangeFog = deFALSE) = 0;
00073
00074 virtual void SetOrthoWidth(deDouble Width) = 0;
00075
00076 virtual void EnableOrtho(deBoolean OrthoEnable) = 0;
00077
00078
00079
00080 virtual deBoolean BuildRootFrustum(IdePlaneFrustum * pFrustum) = 0;
00081
00082
00083
00084
00085 virtual deVec3d ScreenPointToWorldVec(int x, int y, deVec3d *StartPosition) = 0;
00086
00087 virtual deBoolean WorldPosToScreenPos(const deVec3d &pos, int &x, int &y) = 0;
00088
00089
00090
00091
00092
00093 // virtual deBoolean FrustumRect(const deFrustum & Frustum, deRect & ScreenRect) = 0;
00094 virtual deBoolean FrustumRect(const IdePlaneFrustum * pFrustum, deRect & ScreenRect) = 0;
00095
00096
00097 virtual HWND GetWindow() = 0;
00098
00099 virtual deRect GetRect() = 0;
00100
00101 virtual deDouble GetFOV() = 0;
00102
00103
00104
00105 virtual deDouble GetFOVy(deDouble &Aspect) = 0;
00106
00107 virtual deDouble GetNearClip() = 0;
00108
00109 virtual deDouble GetFarClip() = 0;
00110
00111 virtual deDouble GetOrthoWidth() = 0;
00112
00113
00114 virtual deBoolean IsOrtho() = 0;
00115 virtual deBoolean GetFog(deFloat& Near, deFloat& Far, deARGB& Color, deBoolean& RangeFog) = 0;
00116
00117
00118
00119
00120 virtual void LockAspect(deDouble Aspect) = 0;
00121
00122
00123
00124 virtual deTransformInfo & Position() = 0;
00125 };
00126
00127
00128
00129
00130 DE3D_INTERFACE_(IdePlaneFrustum)
00131 {
00132 protected:
00133 virtual ~IdePlaneFrustum() {}
00134 public:
00135 virtual long Release() = 0;
00136
00137 virtual deBoolean CreateFromPolygon(const deVec3d * PointArray, long NumPoints, const deVec3d & Position) = 0;
00138 virtual deBoolean CopyFromFrustum(const IdePlaneFrustum* Ref) = 0;
00139
00140 virtual deBoolean Optimize() = 0;
00141
00142 virtual deBoolean IsOrtho() const = 0;
00143 virtual void SetOrtho(deBoolean Ortho) = 0;
00144
00145 virtual u32 GetNumPlanes() const = 0;
00146 virtual void SetNumPlanes(u32 NumPlanes) = 0;
00147
00148 virtual void AddPlane(const dePlane & plane) = 0;
00149
00150 virtual void GetPlane(u32 index, dePlane & plane) const = 0;
00151 virtual void SetPlane(u32 index, const dePlane & plane) = 0;
00152
00153 virtual void SetInVec(const deVec3d & InVec) = 0;
00154 virtual void SetPosVec(const deVec3d & PosVec) = 0;
00155 virtual void SetDists(const deDouble & Min, const deDouble & Max) = 0;
00156 virtual deDouble GetMinDist() const = 0;
00157 virtual deDouble GetMaxDist() const = 0;
00158
00159 virtual deBoolean TestSphereInside(const deBoundSphere& Sphere, const deVec3d& WorldPos, deBoolean & AllInside) const = 0;
00160 virtual deBoolean TestAABBInside(const deAABB& BBox, const deVec3d& WorldPos, deBoolean & AllInside) const = 0;
00161 };
00162
00163 #endif